// import router from '@/router'
import { useLoginStore } from '@/stores/loginStore'
// import appConstants from '@/utils/appConstants'
import axios from 'axios'
import { ElMessage } from 'element-plus'
import lodash from 'lodash'

const createRequest = () => {
  const instance = axios.create({
    timeout: 30000,
  })

  instance.interceptors.request.use(
    function (config) {
      const loginStore = useLoginStore()
      const token = lodash.get(loginStore, 'loginInfo.token')
      if (token) {
        config.headers.Authorization = `Bearer ${token}`
      }
      return config
    },
    function (error) {
      return Promise.reject(error)
    },
  )

  instance.interceptors.response.use(
    function (response) {
      const loginStore = useLoginStore()
      const newToken = response.headers['x-new-token']
      if (newToken) {
        loginStore.setLoginInfo({
          ...loginStore.loginInfo,
          token: newToken,
        })
      }
      return response.data
    },
    function (error) {
      if (error.response) {
        throw new Error(error.response.data);
        // const loginStore = useLoginStore()
        // switch (error.status) {
        //   case 400:

        //     // ElMessage(errorMessages.get(error.response.data) || error.response.data)
        //     break
        //   case 401:
        //     loginStore.clearLoginInfo()
        //     ElMessage('请登录后操作')
        //     router.push('/login')
        //     break
        //   // case 403:
        //   //   // 处理 403 禁止访问
        //   //   ElMessage('抱歉，您没有权限访问该资源')
        //   //   break
        //   // case 404:
        //   //   ElMessage('抱歉，您访问的资源不存在')
        //   //   // 处理 404 未找到
        //   //   break
        //   // 其他状态码处理
        //   default:
        //     ElMessage('抱歉，出现未知错误')
        //     console.error('An error occurred:', error.response.status, error.response.data)
        // }
      } else {
        // 处理网络错误
        ElMessage('抱歉，出现网络错误')
        console.error('Network Error:', error.message)
      }
      return Promise.reject(error)
    },
  )

  return instance
}

const request = createRequest();

export {request}
